home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / Calcul / Calc.jar / MathFunc.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-02-09  |  7.0 KB  |  434 lines

  1. class MathFunc {
  2.    private static int _fbits;
  3.    private static int _digits;
  4.    private static long _c180;
  5.    private static long _one;
  6.    private static long _fmask;
  7.    private static long _dmul;
  8.    private static long _flt;
  9.    private static long _pi;
  10.    // $FF: renamed from: e long[]
  11.    private static long[] field_0;
  12.    // $FF: renamed from: PI long
  13.    public static long field_1;
  14.    // $FF: renamed from: E long
  15.    public static long field_2;
  16.    public static byte ERROR;
  17.  
  18.    public MathFunc() {
  19.    }
  20.  
  21.    public static long abs(long var0) {
  22.       return var0 < 0L ? -var0 : var0;
  23.    }
  24.  
  25.    public static long acos(long var0) {
  26.       return field_1 / 2L - asin(var0);
  27.    }
  28.  
  29.    public static long add(long var0, long var2) {
  30.       return var0 + var2;
  31.    }
  32.  
  33.    public static long asin(long var0) {
  34.       if (abs(var0) > _one) {
  35.          ERROR = 1;
  36.          return 0L;
  37.       } else {
  38.          boolean var2 = var0 < 0L;
  39.          var0 = abs(var0);
  40.          long var3 = mul(mul(mul(mul((long)(145103 >> (int)_flt), var0) - (long)(599880 >> (int)_flt), var0) + (long)(1420468 >> (int)_flt), var0) - (long)(3592413 >> (int)_flt), var0) + (long)(26353447 >> (int)_flt);
  41.          long var5 = field_1 / 2L - mul(sqrt(_one - var0), var3);
  42.          return var2 ? -var5 : var5;
  43.       }
  44.    }
  45.  
  46.    public static long atan(long var0) {
  47.       return asin(div(var0, sqrt(_one + mul(var0, var0))));
  48.    }
  49.  
  50.    public static long atan2(long var0, long var2) {
  51.       long var4 = 0L;
  52.       if (var2 > 0L) {
  53.          var4 = atan(div(var0, var2));
  54.       } else if (var2 < 0L) {
  55.          var4 = (var2 < 0L ? -field_1 : field_1) - atan(abs(div(var0, var2)));
  56.       } else {
  57.          if (var2 == 0L && var0 == 0L) {
  58.             ERROR = 1;
  59.             return var4;
  60.          }
  61.  
  62.          var4 = (var0 < 0L ? -field_1 : field_1) / 2L;
  63.       }
  64.  
  65.       return var4;
  66.    }
  67.  
  68.    public static long convert(long var0, int var2) {
  69.       long var3 = var0 < 0L ? -1L : 1L;
  70.       if (abs((long)var2) < 25L) {
  71.          if (_fbits < var2) {
  72.             var0 = var0 + var3 * (1L << (var2 - _fbits >> 1)) >> var2 - _fbits;
  73.          } else {
  74.             var0 <<= _fbits - var2;
  75.          }
  76.       }
  77.  
  78.       return var0;
  79.    }
  80.  
  81.    public static long cos(long var0) {
  82.       return sin(field_1 / 2L - var0);
  83.    }
  84.  
  85.    public static long cot(long var0) {
  86.       return div(cos(var0), sin(var0));
  87.    }
  88.  
  89.    public static long div(long var0, long var2) {
  90.       boolean var4 = false;
  91.       int var5 = _fbits;
  92.       if (var2 == _one) {
  93.          return var0;
  94.       } else if ((var2 & _fmask) == 0L) {
  95.          return var0 / (var2 >> var5);
  96.       } else {
  97.          if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
  98.             var4 = true;
  99.          }
  100.  
  101.          if (var0 < 0L) {
  102.             var0 = -var0;
  103.          }
  104.  
  105.          if (var2 < 0L) {
  106.             var2 = -var2;
  107.          }
  108.  
  109.          while(max(var0, var2) >= 1L << 63 - var5) {
  110.             var0 >>= 1;
  111.             var2 >>= 1;
  112.             --var5;
  113.          }
  114.  
  115.          long var6 = (var0 << var5) / var2 << _fbits - var5;
  116.          return var4 ? -var6 : var6;
  117.       }
  118.    }
  119.  
  120.    public static long exp(long var0) {
  121.       if (var0 == 0L) {
  122.          return _one;
  123.       } else {
  124.          boolean var2 = var0 < 0L;
  125.          var0 = abs(var0);
  126.          int var3 = (int)(var0 >> _fbits);
  127.          long var4 = _one;
  128.  
  129.          for(int var6 = 0; var6 < var3 / 4; ++var6) {
  130.             var4 = mul(var4, field_0[4] >> (int)_flt);
  131.          }
  132.  
  133.          if (var3 % 4 > 0) {
  134.             var4 = mul(var4, field_0[var3 % 4] >> (int)_flt);
  135.          }
  136.  
  137.          var0 &= _fmask;
  138.          if (var0 > 0L) {
  139.             long var7 = _one;
  140.             long var9 = 0L;
  141.             long var11 = 1L;
  142.  
  143.             for(int var13 = 0; var13 < 16; ++var13) {
  144.                var9 += var7 / var11;
  145.                var7 = mul(var7, var0);
  146.                var11 *= (long)(var13 + 1);
  147.                if (var11 > var7 || var7 <= 0L || var11 <= 0L) {
  148.                   break;
  149.                }
  150.             }
  151.  
  152.             var4 = mul(var4, var9);
  153.          }
  154.  
  155.          if (var2) {
  156.             var4 = div(_one, var4);
  157.          }
  158.  
  159.          return var4;
  160.       }
  161.    }
  162.  
  163.    public static long fact(long var0) {
  164.       long var2 = 1L;
  165.  
  166.       for(long var4 = var0 >> _fbits; var4 > 1L; --var4) {
  167.          var2 *= var4;
  168.       }
  169.  
  170.       return toFP(var2);
  171.    }
  172.  
  173.    public static int getPrecision() {
  174.       return _fbits;
  175.    }
  176.  
  177.    public static long log(long var0) {
  178.       // $FF: Couldn't be decompiled
  179.    }
  180.  
  181.    public static long max(long var0, long var2) {
  182.       return var0 < var2 ? var2 : var0;
  183.    }
  184.  
  185.    public static long min(long var0, long var2) {
  186.       return var2 < var0 ? var2 : var0;
  187.    }
  188.  
  189.    public static long mul(long var0, long var2) {
  190.       boolean var4 = false;
  191.       int var5 = _fbits;
  192.       long var6 = _fmask;
  193.       if ((var0 & var6) == 0L) {
  194.          return (var0 >> var5) * var2;
  195.       } else if ((var2 & var6) == 0L) {
  196.          return var0 * (var2 >> var5);
  197.       } else {
  198.          if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
  199.             var4 = true;
  200.          }
  201.  
  202.          if (var0 < 0L) {
  203.             var0 = -var0;
  204.          }
  205.  
  206.          if (var2 < 0L) {
  207.             var2 = -var2;
  208.          }
  209.  
  210.          while(max(var0, var2) >= 1L << 63 - var5) {
  211.             var0 >>= 1;
  212.             var2 >>= 1;
  213.             var6 >>= 1;
  214.             --var5;
  215.          }
  216.  
  217.          long var8 = (var0 >> var5) * (var2 >> var5) << var5;
  218.          long var10 = (var0 & var6) * (var2 & var6) >> var5;
  219.          var10 += (var0 & ~var6) * (var2 & var6) >> var5;
  220.          var8 = var8 + var10 + ((var0 & var6) * (var2 & ~var6) >> var5) << _fbits - var5;
  221.          if (var8 < 0L) {
  222.             ERROR = 2;
  223.          }
  224.  
  225.          return var4 ? -var8 : var8;
  226.       }
  227.    }
  228.  
  229.    public static long pow(long var0, long var2) {
  230.       boolean var4 = var2 < 0L;
  231.       long var5 = _one;
  232.       var2 = abs(var2);
  233.  
  234.       for(int var7 = (int)var2 >> _fbits; var7-- > 0; var5 = mul(var5, var0)) {
  235.       }
  236.  
  237.       if (var5 < 0L) {
  238.          ERROR = 2;
  239.          return 0L;
  240.       } else {
  241.          if (var0 != 0L) {
  242.             var5 = mul(var5, exp(mul(log(var0), var2 & _fmask)));
  243.          } else {
  244.             var5 = 0L;
  245.          }
  246.  
  247.          return var4 ? div(_one, var5) : var5;
  248.       }
  249.    }
  250.  
  251.    public static long round(long var0, int var2) {
  252.       long var3 = 10L;
  253.  
  254.       for(int var5 = 0; var5 < var2; ++var5) {
  255.          var3 *= 10L;
  256.       }
  257.  
  258.       var3 = div(toFP(5L), toFP(var3));
  259.       if (var0 < 0L) {
  260.          var3 = -var3;
  261.       }
  262.  
  263.       return var0 + var3;
  264.    }
  265.  
  266.    public static int setPrecision(int var0) {
  267.       if (var0 <= 24 && var0 >= 0) {
  268.          _fbits = var0;
  269.          _one = 1L << var0;
  270.          _flt = (long)(24 - var0);
  271.          _digits = 0;
  272.          _dmul = 1L;
  273.          _fmask = _one - 1L;
  274.          field_1 = _pi >> (int)_flt;
  275.          field_2 = field_0[1] >> (int)_flt;
  276.  
  277.          for(long var1 = _one; var1 != 0L; _dmul *= 10L) {
  278.             var1 /= 10L;
  279.             ++_digits;
  280.          }
  281.  
  282.          return _digits;
  283.       } else {
  284.          return _digits;
  285.       }
  286.    }
  287.  
  288.    public static long sin(long var0) {
  289.       long var2 = mul(var0, div(_c180, field_1));
  290.       var2 %= toFP(360L);
  291.       if (var2 < 0L) {
  292.          var2 += toFP(360L);
  293.       }
  294.  
  295.       long var4 = var2;
  296.       if (var2 >= toFP(90L) && var2 < toFP(270L)) {
  297.          var4 = _c180 - var2;
  298.       } else if (var2 >= toFP(270L) && var2 < toFP(360L)) {
  299.          var4 = -(toFP(360L) - var2);
  300.       }
  301.  
  302.       long var6 = var4 / 90L;
  303.       long var8 = mul(var6, var6);
  304.       long var10 = mul(mul(mul(mul((long)(-73190 >> (int)_flt), var8) + (long)(1333581 >> (int)_flt), var8) - (long)(10836755 >> (int)_flt), var8) + (long)(26353564 >> (int)_flt), var6);
  305.       return var10;
  306.    }
  307.  
  308.    public static long sqrt(long var0) {
  309.       return sqrt(var0, 24);
  310.    }
  311.  
  312.    public static long sqrt(long var0, int var2) {
  313.       if (var0 < 0L) {
  314.          ERROR = 1;
  315.          return 0L;
  316.       } else if (var0 == 0L) {
  317.          return 0L;
  318.       } else {
  319.          long var3 = var0 + _one >> 1;
  320.  
  321.          for(int var5 = 0; var5 < var2; ++var5) {
  322.             var3 = var3 + div(var0, var3) >> 1;
  323.          }
  324.  
  325.          if (var3 < 0L) {
  326.             ERROR = 2;
  327.             return var3;
  328.          } else {
  329.             return var3;
  330.          }
  331.       }
  332.    }
  333.  
  334.    public static long sub(long var0, long var2) {
  335.       return var0 - var2;
  336.    }
  337.  
  338.    public static long tan(long var0) {
  339.       return div(sin(var0), cos(var0));
  340.    }
  341.  
  342.    public static long toFP(long var0) {
  343.       return var0 << _fbits;
  344.    }
  345.  
  346.    public static long toFP(String var0) {
  347.       byte var1 = 0;
  348.       if (var0.charAt(0) == '-') {
  349.          var1 = 1;
  350.       }
  351.  
  352.       String var2 = "-1";
  353.       int var3 = var0.indexOf(46);
  354.       if (var3 >= 0) {
  355.          for(var2 = var0.substring(var3 + 1, var0.length()); var2.length() < _digits; var2 = var2 + "0") {
  356.          }
  357.  
  358.          if (var2.length() > _digits) {
  359.             var2 = var2.substring(0, _digits);
  360.          }
  361.       } else {
  362.          var3 = var0.length();
  363.       }
  364.  
  365.       long var4 = 0L;
  366.       if (var1 != var3) {
  367.          var4 = Long.parseLong(var0.substring(var1, var3));
  368.       }
  369.  
  370.       long var6 = Long.parseLong(var2) + 1L;
  371.       long var8 = (var4 << _fbits) + (var6 << _fbits) / _dmul;
  372.       if (var1 == 1) {
  373.          var8 = -var8;
  374.       }
  375.  
  376.       return var8;
  377.    }
  378.  
  379.    public static long toLong(long var0) {
  380.       var0 = round(var0, 0);
  381.       return var0 >> _fbits;
  382.    }
  383.  
  384.    public static String toString(long var0) {
  385.       boolean var2 = false;
  386.       if (var0 < 0L) {
  387.          var2 = true;
  388.          var0 = -var0;
  389.       }
  390.  
  391.       long var3 = var0 >> _fbits;
  392.       long var5 = _dmul * (var0 & _fmask) >> _fbits;
  393.  
  394.       String var7;
  395.       for(var7 = Long.toString(var5); var7.length() < _digits; var7 = "0" + var7) {
  396.       }
  397.  
  398.       return (var2 ? "-" : "") + Long.toString(var3) + "." + var7;
  399.    }
  400.  
  401.    public static String toString(long var0, int var2) {
  402.       if (var2 > _digits) {
  403.          var2 = _digits;
  404.       }
  405.  
  406.       String var7 = toString(round(var0, var2));
  407.       var7 = var7.substring(0, var7.length() - _digits + var2);
  408.       int var3 = var7.indexOf(46);
  409.       if (var3 >= 0) {
  410.          long var5 = Long.parseLong(var7.substring(var3 + 1, var7.length()));
  411.          if (var5 == 0L) {
  412.             var7 = var7.substring(0, var3);
  413.          }
  414.       }
  415.  
  416.       return var7;
  417.    }
  418.  
  419.    static {
  420.       field_0 = new long[]{_one, 45605201L, 123967790L, 336979391L, 916004956L};
  421.       ERROR = 0;
  422.       _c180 = 3019898880L;
  423.       _fbits = 24;
  424.       _digits = 8;
  425.       _one = 16777216L;
  426.       _fmask = 16777215L;
  427.       _dmul = 100000000L;
  428.       _flt = 0L;
  429.       _pi = 52707178L;
  430.       field_1 = _pi;
  431.       field_2 = field_0[1];
  432.    }
  433. }
  434.